var p1 = new Promise(function (resolve, reject){
    setTimeout(function (){
        resolve('p1') //成功后的传
    },1)
})
p1.then(function (mes){ //then可以接收到返回的参数
    console.log('zq',mes);
})

var p2 = new Promise(function(resolve,reject){
    let i = 1/1;
    resolve(i); //一旦有了结果 resolve 或者reject 就会立即返回
    reject(i)//reject的结果通过catch获取
})
//简写
p2.then(onresolve=>{
    console.log('2.0',onresolve)
}).catch(onreject=>{
    console.log('2.0',onreject)
});
//详写
p2.then(function (resolve,reject){
    console.log('2.1',resolve)
}).catch(function (reject){
    console.log('2.1',reject)
    }
)
//promise传递
var p3 = new Promise(function (resolve,reject){
    resolve('p3')
})
var p4 = new Promise(function (resolve, reject){
    resolve(p3)
})
p4.then(onresolve=>{
    console.log(typeof p4==Object)
    console.log('p4',typeof onresolve,onresolve)
})
 new Promise((resolve,reject)=>{
    resolve('p5')
}).then(onresolve=>{
    console.log('5',onresolve)
})
//合并promise
var p6 = Promise.all([p1,p2,p3,p4])
p6.then(onresolve=>{
    console.log('p6',onresolve)
})
//生成promise
var p7 = [71,72,73,74].map(id=>{
    return id+id;
})
//（1）只有p1、p2、p3的状态都变成fulfilled，p的状态才会变成fulfilled，此时p1、p2、p3的返回值组成一个数组，传递给p的回调函数。
// （2）只要p1、p2、p3之中有一个被rejected，p的状态就变成rejected，此时第一个被reject的实例的返回值，会传递给p的回调函数。
Promise.all(p7).then(res=>{
    console.log('p7',res)
})
// 中，只要p1、p2、p3之中有一个实例率先改变状态，p的状态就跟着改变。那个率先改变的Promise实例的返回值，就传递给p的返回值。
Promise.race(p7).then(res=>{
    console.log('p8',p7)
    }
)
Promise.resolve('p9').then(res=>{
    console.log(res)
})
Promise.reject('p10--error').then(res=>{
    console.log(res)
}).catch(error=>{
    console.log(error)
})
Promise.reject('p11--error').then((null),(error)=>{
    console.log(error)
})


